package com.supersystem.utils;

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import org.apache.commons.lang3.StringUtils;

/**
 *
 * <li>功能简述:浮点数操作工具类
 * <li>详细描述:
 * @author  luoyg
 * @version  [8.0 2010-10-25]
 * @see  [相关类/方法]
 * @since  8.0
 */
public class NumberUtil {
    /**
     * weigth精度(4)
     */
    public static final int WEIGHT_PRECISION = 4;
    /**
     * money精度(4)
     */
    public static final int MONEY_PRECISION = 4;
    /**
     * 默认精度(4)
     */
    public static final int DEFAULT_PRECISION = 4;

    /**
     * 重量格式
     */
    public static final String WEIGHT_FORMATER = "0.000";
    /**
     * money格式
     */
    private static final String MONEY_FORMATER = "0.00";

    private static final String QTY_FORMATER = "0";


    public static int compareWeight(double d1,double d2){
        return compare(d1,d2,WEIGHT_PRECISION);
    }

    public static int compareMoney(double d1,double d2){
        return compare(d1,d2,MONEY_PRECISION);
    }

    public static int compare(double d1,double d2){
        return compare(d1,d2,DEFAULT_PRECISION);
    }

    public static int compare(double d1,double d2,int precision){
        BigDecimal bd1 = BigDecimal.valueOf(d1).setScale(precision, BigDecimal.ROUND_DOWN);
        BigDecimal bd2 = BigDecimal.valueOf(d2).setScale(precision, BigDecimal.ROUND_DOWN);
        return bd1.compareTo(bd2);
    }

    /**
     * <li>方法描述：格式化重量(默认3为小数)
     * @param d1
     * @return
     */
    public static String formatWeight(double d1){
        return format(d1,WEIGHT_FORMATER);
    }

    /**
     * <li>方法描述：格式化money（默认2位小数）
     * @param d1
     * @return
     */
    public static String formatMoney(double d1){
        return format(d1,MONEY_FORMATER);
    }

    /**
     * <li>方法描述：格式化数量</li>
     * @param d1
     * @return
     */
    public static String formatQty(double d1){
        return NumberFormat.getIntegerInstance().format(d1);
    }

    public static String format(double d1,String formater){
        return new DecimalFormat(formater).format(d1);
    }
    
    /**
     * 将数字格式成字符，按照指定的长度
     * 比如指定格式为 “00000”，给数字15
     * 将输出00015
     * @return
     */
    public static String formatToLengthString(int num,String format)
    {
    	DecimalFormat df=new DecimalFormat(format);
    	return df.format(num);
    }
    
    /**
     * 将字符转换成int型数字，如果转换不成功，则返回0
     * @param numStr
     * @return
     */
    public static int paseStringToInt(String numStr)
    {
    	if(StringUtils.isNotBlank(numStr) && isNumeric(numStr)){
    		return Integer.parseInt(numStr);
    	}else{
    		return 0;
    	}
    }
    
    /**
     * 将字符转换成Long型数字，如果转换不成功，则返回0
     * @param numStr
     * @return
     */
    public static Long paseStringToLong(String numStr)
    {
    	if(StringUtils.isNotBlank(numStr) && isNumeric(numStr)){
    		return Long.parseLong(numStr);
    	}else{
    		return 0L;
    	}
    }
    
    /**
     * 判断是否为数字
     * @param str
     * @return
     */
	public static boolean isNumeric(String str) {
		for (int i = str.length(); --i >= 0;) {
			if (!Character.isDigit(str.charAt(i))) {
				return false;
			}
		}
		return true;
	}

}
